package com.google.project.client.ProjectManager;

import java.util.ArrayList;
import java.util.List;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.Widget;
import com.google.project.client.Service.ProjTaskService;
import com.google.project.client.Service.ProjTaskServiceAsync;
import com.google.project.client.Service.ProjectService;
import com.google.project.client.Service.ProjectServiceAsync;
import com.google.project.shared.ProjectDTO;
import com.google.project.shared.ProjectTaskDTO;

public class PMChangeProjectStatus extends DialogBox {
	@UiField Button button;
	@UiField ListBox cboStatus;
	@UiField Button button_1;
	private static final Binder binder = GWT.create(Binder.class);

	interface Binder extends UiBinder<Widget, PMChangeProjectStatus> {
	}

	
	
	ProjectDTO currProject = new ProjectDTO();
	List<ProjectTaskDTO> listTask =  new ArrayList<ProjectTaskDTO>();
	//PMChangeTaskStatus dialog = new PMChangeTaskStatus();
	private final ProjTaskServiceAsync projectTaskService = GWT.create(ProjTaskService.class);
	private final ProjectServiceAsync projectService = GWT.create(ProjectService.class);
	
	public PMChangeProjectStatus() {
		setWidget(binder.createAndBindUi(this));
	}

	public PMChangeProjectStatus(ProjectDTO project) {
		setWidget(binder.createAndBindUi(this));
		//dialog = this;
		currProject = project;
		cboStatus.addItem("---Chọn---","0");
		cboStatus.addItem("Đã hoàn thành ","1");
		cboStatus.addItem("Ngừng thực hiện ","2");
		projectService.getListTask(project.getProjectID(), new AsyncCallback<List<ProjectTaskDTO>>() {
			
			@Override
			public void onSuccess(List<ProjectTaskDTO> result) {
				// TODO Auto-generated method stub
				listTask = result;
			}
			
			@Override
			public void onFailure(Throwable caught) {
				// TODO Auto-generated method stub
				
			}
		});
	}
	void closeDialog()
	{
		this.hide();
		}
	
	Boolean checkForFinish()
	{
		
			for(ProjectTaskDTO task:listTask)
			{
				if(task.getStatus()!=3&&task.getStatus()!=2)
				{
					Window.alert("Không thể kết thúc dự án khi có công việc chưa được kết thúc hoặc ngừng thực hiện.");
					return false;
				}
			}
		
		
		return true;
		}
	@UiHandler("button")
	void onButtonClick(ClickEvent event) {
		closeDialog();
	}
	
	//click hoan thanh chuyen trang thai

	@UiHandler("button_1")
	void onButton_1Click(ClickEvent event) {
	//ket thuc du an
		//kiem tra cac cong viec da dc close het chua
		//chuyen trang thai du an up date ngay ket thuc du an
		//up date tinh trang nhan viec du an
		
		if(cboStatus.getValue(cboStatus.getSelectedIndex()).equals("0"))
		{
			Window.alert("Bạn phải chọn tình trạng mới cho dự án");
		}
		else
		{
			String message ="";
			if(cboStatus.getValue(cboStatus.getSelectedIndex()).equals("1"))
			{
				message="Bạn có muốn đổi trạng thái dự án thành \"Đã hoàn thành\" không ? " ;
				if(currProject.getStatus()==0)
				{
					Window.alert("Dự án chưa bắt đầu không thể chuyển sang trạng thái \"Đã hoàn thành\"");
				}
				else
				{
					//kiem c
					if(checkForFinish())
					{
						if(Window.confirm(message))
						{
							currProject.setStatus(2);
							projectService.updateProjectForClose(currProject, new AsyncCallback<Void>() {
								
								@Override
								public void onSuccess(Void result) {
									// TODO Auto-generated method stub
									Window.alert("Chuyển trạng thái thành công");
									closeDialog();
								}
								
								@Override
								public void onFailure(Throwable caught) {
									// TODO Auto-generated method stub
									
								}
							});
						}
					}
				
				}
			}else
			{
				message = "Bạn có muốn đổi trạng thái dự án thành \"Ngừng thực hiện\" không ? ";
				if (Window.confirm(message)) {
					currProject.setStatus(3);
					projectService.updateProjectForClose(currProject, new AsyncCallback<Void>() {
						
						@Override
						public void onSuccess(Void result) {
							// TODO Auto-generated method stub
							Window.alert("Chuyển trạng thái thành công");
							closeDialog();
						}
						
						@Override
						public void onFailure(Throwable caught) {
							// TODO Auto-generated method stub
							
						}
					});
					/*
					projectTaskService.updateTaskForClose(currTask, listTask,new AsyncCallback<Void>() {

								@Override
								public void onSuccess(Void result) {
									// TODO Auto-generated method stub
									Window.alert("Chuyển trạng thái dự án thành công");
									closeDialog();
								}

								@Override
								public void onFailure(Throwable caught) {
									// TODO Auto-generated method stub

								}
							});
					*/

				}

			}
		
			
		}
	}
	
}
